package com.hspedu.generic.cusotmgeneric;

import java.util.ArrayList;

/**
 * @author DL5O
 * @version 1.0
 */
public class CustomGenericMethodGeneric {
    public static void main(String[] args) {
        Car car = new Car();
        car.fly("你好", 10);//这里的是10会进行自动装箱
        //当调用方法时，传入参数，编译器，就会确定类型
        System.out.println("=============");
        car.fly(300, 10.3);

        System.out.println("=============");
        //T->String R->ArrayList
        Fish<String, ArrayList> fish = new Fish<>();
        fish.hello(new ArrayList(),11.3f);
    }
}

//泛型方法，可以定义在普通类中，也可以定义在泛型类中
class Car {//非常普通的类

    public void run() {//普通方法

    }

    //解读
    //1.<T,R> 为泛型标识符
    //2.提供给 fly 使用的
    public <T, R> void fly(T t, R r) {//泛型方法
        System.out.println(t.getClass());//String
        System.out.println(r.getClass());//Integer
    }
}

class Fish<T, R> {//泛型类

    public void run() {

    }

    public <U, M> void eat(U u, M m) {//泛型方法

    }

    //说明
    //1.下面hi方法不是泛型方法
    //2.是hi方法使用了类声明的泛型 T
    public void hi(T t) {
    }

    //泛型方法，可以使用类声明的泛型，也可以使用自己声明的泛型
    public <K> void hello(R r,K k) {
        System.out.println(r.getClass());//ArrayList
        System.out.println(k.getClass());//
    }

}